Highly scalable computer systems of the future will be based on large ensembles of commodity components, such as processors, disk drives, memory, etc. As increasingly inexpensive, high-performance systems scale to even larger sizes, the task of managing hardware and software components and maintaining reliable and efficient computation with those components becomes increasingly complex and costly. For example, systems must be redeployed to accommodate evolving user demands without lots of manual rework. Typically physical reconfiguration of the components for redeploying systems to accommodate evolving user demands is performed by manually moving components or manually programming switches connecting components, such as blades and disk drives. For large-scale systems, the manual, reconfiguration becomes unmanageable, time consuming, and costly.
Some reconfigurable systems exist that allow for reconfiguration of hardware while minimizing manual labor. FPGAs (Field Programmable Gate Arrays) are an example of a reconfigurable device. FPGAs offer the ability to configure arbitrary logic and a small amount of flip-flop memory into different hardware designs through use of a hardware description language. While FPGAs enable a certain degree of configurability, their flexibility is limited to the chip level instead of the system level. Thus, for large-scale systems, where system components must be allocated to meet evolving user demands, FPGAs offer limited, system-level, physical customization.
Utiliity data centers offer some system-level customization. For example, components, such as servers and disk drives may be connected via a network, and disk drives may be allocated to certain servers to meet varying user demands. However, allocating disk drives to different servers requires a system administrator to program the network to provide the interconnections between the allocated servers and disk drives. Also, the physical reconfiguration of components may be limited to servers and disk drives.